package com.coocaa.ops.admin.v1.hvi.mapper;

import com.coocaa.ops.admin.v1.hvi.model.HistoryVersionInfoEntity;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author tangminghong
 * @date 2019-10-07
 */
public interface IHistoryVersionInfoMapper {

    /**
     * 获取版本信息
     *
     * @param resourceType
     * @param resourceId
     * @return 返回版本与版本信息对应的map
     */
    @MapKey("resourceVersion")
    Map<Integer, HistoryVersionInfoEntity> getHistoryInfo(@Param("resourceType") String resourceType,
                                                         @Param("resourceId") Integer resourceId,
                                                         @Param("date") Date date,
                                                         @Param("limit") Integer limit,
                                                         @Param("earliestVersion") Integer earliestVersion);

    void addHistoryInfo(@Param("resourceType") String resourceType,
                        @Param("resourceId") Integer resourceId,
                        @Param("resourceVersion") Integer resourceVersion,
                        @Param("userId") Integer userId,
                        @Param("launchDate") Date launchDate);


    /**
     * 获取指定日期后最早上线的版本的上线时间，如V5在09-30上线，V6在10-02上线，传入参数10-01，查询得出的是09-30
     * （其他业务单纯在查询时指定上线时间在指定时间后是不准确的，比如说V5在09-30上线，V6在10-02上线，若要查询在10-01之后的数据，只指定上线时间>10-01，只能查询到V6的数据，但实际上V5在10-01后仍在线上，需要查询到；这个逻辑使用sql比较难，使用mysql存储过程或函数也比较难维护，故在代码中实现）
     *
     * @param date
     * @param resourceType
     * @param resourceId
     * @return
     */
    Date getEarliestLaunchDate(@Param("date") Date date, @Param("resourceType") String resourceType, @Param("resourceId") Integer resourceId);

    List<Date> getLaunchDate(@Param("resourceType") String resourceType, @Param("resourceId") Integer resourceId, @Param("resourceVersion") Integer resourceVersion);

    Date getOffTimeByVersion(@Param("date") Date date, @Param("resourceType") String resourceType, @Param("resourceId") Integer resourceId);
}
